On shared memory systems using globally shared memory, one address space is generally provided for an entire system. Within this space, multiple independent hardware nodes are each allocated a unique series of addresses in physical memory. These independent hardware nodes each have loaded thereon a corresponding microkernel of the operating software ("OS") being used on the system.
A microkernel will be understood to be the lowest level of OS in a system. Microkernels load and execute in physical memory because they are the applications that run all of the virtual memory. Physical memory does not have a map; as noted above, it is a specifically identified memory region having a unique address space for each node. Each microkernel is compiled as a regular program, and all memory references are therefore made to absolute addresses in the unique address space of physical memory. Therefore, when the microkernel loads into memory, it must do so at the exact memory address compiled to in the microkernel.
Note that the option to use relocatable addressing with microkernels is known in the art. This method is far from optimal, however, and is thus generally avoided. This method invokes a non-standard mode of execution in which processing takes more time and is generally less efficient. Further, use of the method requires a less stable compiler strategy that potentially may cause additional software errors in execution. Thus, it has always been preferable to use non-relocatable memory references (i.e. absolute addressing) when dealing with microkernels.
Most applications running on an OS do not have to endure this inflexibility, because each application has its own virtual address space and so just about any address can be mapped to serve the application's particular memory references.
Microkernels, however, are atypical in that they are not disposed to have this feature. When a microkernel is loaded into physical address space, there is no map and so it has to be loaded into the actual addresses specified. And since the physical address space for a system comprises a series of unique addresses for each node, a memory management problem occurs when microkernels loaded on to different nodes are desired to be shared between several processors.
A need in the art has therefore arisen for a mechanism where each node has its own region of physical memory and yet its address space may be compiled to by multiple microkernels. Further, at the same time, the combined entire address space must cooperate to enable a globally shared memory system for user applications.
Current systems in the art enable physical memory address space to be compiled to by multiple microkernels through the use of cumbersome translation tables and requiring the use of temporary storage registers. Processing of these tables through additional storage registers incurs measurable wasted processor time. There is therefore a need in the art to enable microkernels to appear to simultaneously share physical address space "on the fly," without the need for temporary storage or wasted processor time, and in a cache-coherent environment.